import plotly.graph_objects as go
import numpy as np

# 生成示例数据
np.random.seed(42)
data = np.random.randn(100) * 10 + 50

# 计算统计数据
max_val = round(np.max(data), 2)
min_val = round(np.min(data), 2)
avg_val = round(np.mean(data), 2)
std_val = round(np.std(data), 2)

# 创建图表
fig = go.Figure(data=go.Scatter(y=data, mode='markers', name='数据点'))

# 添加统计信息作为注释
stats_text = f"max: {max_val} | min: {min_val} | avg: {avg_val}"

fig.add_annotation(
    text=stats_text,
    xref="paper", yref="paper",
    x=0.5, y=1.15,
    showarrow=False,
    font=dict(size=12),
    align="center",
    # bordercolor="#c7c7c7",
    borderwidth=2,
    borderpad=8,
    # bgcolor="#ffffff",
    opacity=0.8
)

# 更新布局
fig.update_layout(
    title="数据分布及统计信息",
    yaxis_title="数值",
    font=dict(family="SimHei"),  # 确保中文正常显示
    margin=dict(t=100, b=40, l=60, r=40)  # 调整边距为统计信息留出空间
)

# 显示图表
fig.show()

# 如果需要保存为 HTML 文件
# fig.write_html("带有统计信息的图表.html")    